HiKey: init EDMA controller with non secure mode
authorHaojian Zhuang <[email protected]>
Wed, 18 Oct 2017 11:52:20 +0000 (19:52 +0800)
committerHaojian Zhuang <[email protected]>
Wed, 18 Oct 2017 12:02:12 +0000 (20:02 +0800)
Init EDMA controller with non secure mode. A lot of peripherals are
depend on EDMA controller. But EDMA controller is in secure mode
by default. And this operation has to be executed in secure mode.

Signed-off-by: Haojian Zhuang <[email protected]>
plat/hisilicon/hikey/hikey_bl31_setup.c
plat/hisilicon/hikey/include/hi6220.h

index c592fc78555c93beb43014f1a35a9232a9bc9ec0..412b59355f0a4167f02ad2fab21e4549c063cc13 100644 (file)
@@ -16,6 +16,7 @@
 #include <hi6220.h>
 #include <hisi_ipc.h>
 #include <hisi_pwrc.h>
+#include <mmio.h>
 #include <platform_def.h>
 
 #include "hikey_def.h"
@@ -152,6 +153,20 @@ void bl31_plat_arch_setup(void)
                           BL31_COHERENT_RAM_LIMIT);
 }
 
+/* Initialize EDMAC controller with non-secure mode. */
+static void hikey_edma_init(void)
+{
+       int i;
+       uint32_t non_secure;
+
+       non_secure = EDMAC_SEC_CTRL_INTR_SEC | EDMAC_SEC_CTRL_GLOBAL_SEC;
+       mmio_write_32(EDMAC_SEC_CTRL, non_secure);
+
+       for (i = 0; i < EDMAC_CHANNEL_NUMS; i++) {
+               mmio_write_32(EDMAC_AXI_CONF(i), (1 << 6) | (1 << 18));
+       }
+}
+
 void bl31_platform_setup(void)
 {
        /* Initialize the GIC driver, cpu and distributor interfaces */
@@ -160,6 +175,8 @@ void bl31_platform_setup(void)
        gicv2_pcpu_distif_init();
        gicv2_cpuif_enable();
 
+       hikey_edma_init();
+
        hisi_ipc_init();
        hisi_pwrc_setup();
 }
index a9c408de9b5e1f7289a5054ee4a8a935185ff49e..fe7720a6889c18e70001690a9268b6160b9f6f2d 100644 (file)
 
 #define DWUSB_BASE                             0xF72C0000
 
+#define EDMAC_BASE                             0xf7370000
+#define EDMAC_SEC_CTRL                         (EDMAC_BASE + 0x694)
+#define EDMAC_AXI_CONF(x)                      (EDMAC_BASE + 0x820 + (x << 6))
+#define EDMAC_SEC_CTRL_INTR_SEC                        (1 << 1)
+#define EDMAC_SEC_CTRL_GLOBAL_SEC              (1 << 0)
+#define EDMAC_CHANNEL_NUMS                     16
+
 #define PMUSSI_BASE                            0xF8000000
 
 #define SP804_TIMER0_BASE                      0xF8008000